home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / Palettes / SwitchBox / SwitchBox.m < prev    next >
Text File  |  1995-06-12  |  5KB  |  245 lines

  1. /*    
  2. **    Copyright (C) 1992  Ronin Consulting, Inc.
  3. **
  4. **    This program is free software; you can redistribute it and/or modify
  5. **    it under the terms of the GNU General Public License as published by
  6. **    the Free Software Foundation; version 1.
  7. **
  8. **    This program is distributed in the hope that it will be useful,
  9. **    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. **    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. **    GNU General Public License for more details.
  12. **
  13. **    You should have received a copy of the GNU General Public License
  14. **    along with this program; if not, write to the Free Software
  15. **    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16. */
  17. #import "SwitchBox.h"
  18. #import <appkit/Matrix.h>
  19. #import <appkit/color.h>
  20. #import <dpsclient/psops.h>
  21. #import <objc/List.h>
  22.  
  23. #define MAXPANEL 10
  24.  
  25. @interface SwitchBox(Private)             /* No one should have to see this.... */
  26. - setPanel0: anObject;
  27. - setPanel1: anObject;
  28. - setPanel2: anObject;
  29. - setPanel3: anObject;
  30. - setPanel4: anObject;
  31. - setPanel5: anObject;
  32. - setPanel6: anObject;
  33. - setPanel7: anObject;
  34. - setPanel8: anObject;
  35. - setPanel9: anObject;
  36. @end
  37.  
  38. @implementation SwitchBox
  39.  
  40. /*
  41.  * Boxes are rather stubborn about painting a gray background so
  42.  * I set the box as transparent and then fill the rect with the
  43.  * color of the windows background.
  44.  */
  45. - drawSelf:(const NXRect *)rects :(int)rectCount
  46. {
  47.    float r, g, b;
  48.  
  49.    NXConvertColorToRGB([window backgroundColor], &r, &g, &b);
  50.    PSsetrgbcolor(r,g,b);
  51.    NXRectFill(rects);
  52.    return [super drawSelf: rects : rectCount]; /* finish up by calling the real drawSelf */
  53. }
  54.  
  55. - free
  56. {
  57.    if(origContentView)                 /* if I have been switching contents resore my original */
  58.        contentView = origContentView;
  59.  
  60.    if(panelList)                 /* if I have created a panelList free it */
  61.        [panelList free];
  62.    
  63.    return [super free];
  64. }
  65.  
  66. - initFrame:(const NXRect *)frameRect
  67. {
  68.     [super initFrame:frameRect];
  69.     origContentView = nil;
  70.     defaultPanel = -1;
  71.     [self setTitlePosition: NX_NOTITLE];
  72.     [self setBorderType: NX_BEZEL];
  73.     return self;
  74. }
  75.  
  76. - switchToTagOf: sender;
  77. {
  78.  
  79.    if([sender isKindOf: [Matrix class]])
  80.        [self switchTo: [[sender selectedCell] tag]];
  81.    else
  82.        [self switchTo: [sender tag]];
  83.  
  84.    return self;
  85. }
  86.  
  87.  
  88. - switchTo: (int) number;
  89. {
  90.    if(delegate && [delegate respondsTo: @selector(willSwitchTo:)])
  91.        if(![delegate willSwitchTo: number])
  92.        return self;
  93.  
  94.    if(number < 0 || number >= MAXPANEL)
  95.        return self;
  96.  
  97.    [self setContentView: [panelList objectAt: number]];
  98.  
  99.    if([self contentView])
  100.    {
  101.       [self setBorderType: NX_NOBORDER];
  102.       // bFlags.transparent = YES;
  103.       [self display];
  104.       if(delegate && [delegate respondsTo: @selector(didSwitchTo:)])
  105.       [delegate didSwitchTo: number];
  106.    }
  107.    
  108.    return self;
  109. }
  110.  
  111. - setDefaultPanel: (int) number
  112. {
  113.    defaultPanel = number;
  114.    return self;
  115. }
  116.  
  117. - (int) defaultPanel
  118. {
  119.    return defaultPanel;
  120. }
  121.  
  122. - setPanel: anObject at: (int) index
  123. {
  124.    if(index < 0 || index >= MAXPANEL)
  125.        return self;
  126.  
  127.    if(!panelList)
  128.    {
  129.       int x = MAXPANEL;
  130.       panelList = [[List alloc] initCount: MAXPANEL];
  131.       
  132.       while(x--)
  133.       [panelList addObject: [self contentView]];
  134.  
  135.       origContentView = contentView;         /* copy aside my original contentView */
  136.    }
  137.  
  138.    [panelList replaceObjectAt: index with: [anObject contentView]];
  139.  
  140.    if(index == defaultPanel)
  141.        [self switchTo: defaultPanel];
  142.    
  143.    return self;
  144. }
  145.  
  146.  
  147. - setDelegate: anObject
  148. {
  149.    delegate = anObject;
  150.    return self;
  151. }
  152.  
  153. - delegate
  154. {
  155.    return delegate;
  156. }
  157.  
  158. - (const char *)getInspectorClassName
  159. {
  160.     return "SwitchBoxInspector";
  161. }
  162.  
  163. -read:(NXTypedStream *) s
  164. {
  165.    [super read:s];
  166.    NXReadTypes(s, "i", &defaultPanel);
  167.    return self;
  168. }
  169.  
  170.  
  171. -write:(NXTypedStream *) s
  172. {
  173.    [super write:s];
  174.    NXWriteTypes(s, "i", &defaultPanel);
  175.    return self;
  176. }
  177.  
  178. @end                         /* SwitchBox */
  179.  
  180. @implementation SwitchBox(Private)
  181.  
  182. - setPanel0: anObject
  183. {
  184.    [self setPanel: anObject at: 0];
  185.    return self;
  186. }
  187.  
  188. - setPanel1: anObject
  189. {
  190.    [self setPanel: anObject at: 1];
  191.    return self;
  192. }
  193.  
  194. - setPanel2: anObject
  195. {
  196.    [self setPanel: anObject at: 2];
  197.    return self;
  198. }
  199.  
  200. - setPanel3: anObject
  201. {
  202.    [self setPanel: anObject at: 3];
  203.    return self;
  204. }
  205.  
  206. - setPanel4: anObject
  207. {
  208.    [self setPanel: anObject at: 4];
  209.    return self;
  210. }
  211.  
  212. - setPanel5: anObject
  213. {
  214.    [self setPanel: anObject at: 5];
  215.    return self;
  216. }
  217.  
  218. - setPanel6: anObject
  219. {
  220.    [self setPanel: anObject at: 6];
  221.    return self;
  222. }
  223.  
  224. - setPanel7: anObject
  225. {
  226.    [self setPanel: anObject at: 7];
  227.    return self;
  228. }
  229.  
  230. - setPanel8: anObject
  231. {
  232.    [self setPanel: anObject at: 8];
  233.    return self;
  234. }
  235.  
  236. - setPanel9: anObject
  237. {
  238.    [self setPanel: anObject at: 9];
  239.    return self;
  240. }
  241.  
  242. @end                         /* SwitchBox(Private) */
  243.  
  244.  
  245.